第8章 デザインパターン
Iterator(ちょうぜつ本)
このあと紹介する他のパターンも、Iteratorパターンと同じように、概念と名前が先にあるのを重視します。(Kindle版 p.322)
Template Method(ちょうぜつ本)
Bridge(ちょうぜつ本)
しかし、Template Methodで設計可能なのはひとつの系です。軸が異なる共通性が複数あると、継承はうまく機能しません。(Kindle版 p.340)
Singleton(ちょうぜつ本)
Facade(ちょうぜつ本)
Mediator(ちょうぜつ本)
ファサードがビルの入り口にいる受付さんだとすれば、メディエーターはビルに入っている会社の内務マネージャーさんにあたります。(Kindle版 p.367)
Proxy(ちょうぜつ本)
Proxyパターンが、利用者から見たメソッドの使い方を変えずに、特定の振る舞いを拡張するラッパー (Kindle版 p.380)
あるメソッドの(引数や返り値の型は変えずに)振る舞いを拡張
Proxyが同じ型に見せかけた別の振る舞いを生み出す (Kindle版 p.384)
Decorator(ちょうぜつ本)
Decoratorパターンは、既存メソッドの振る舞いはそのままにし、新たなメソッドを追加する拡張ラッパー (Kindle版 p.380)
新しいメソッドを追加
Adapter(ちょうぜつ本)
3ついずれもオブジェクトのつなぎ合わせ方で、割って入る
目的が異なる
Pythonのデコレーターは、GoFのパターンで説明するとDecoratorパターンではなく、Proxyをかぶせるシンタックスシュガーなのでややこしい、という愚痴をそっと入れてあります #ちょうぜつ本
IMO:これはひさてるさんの中でも矛盾しているかも(Decorator(ちょうぜつ本)のQiita版)
IMO:結城先生の本を読んだ感じ、飾り枠(第12章 Decorator)と代理人(第21章 Proxy)なので、飾り枠のほうが該当しそう
ここまでがモジュール構造(?)
Composite(ちょうぜつ本)(唯一のデータ構造)
高階関数
関数を引数や返り値として扱える
(例:Python文法のデコレータ)
そうした関数(※高階関数)の中でも、記述された文脈にある変数を束縛できる特徴を持ったものをクロージャと呼びます。(Kindle版 p.394)
👉項目21 クロージャが変数スコープとどう関わるかを把握しておく
プログラミングテクニックとしてのオブジェクト指向を考えるうえで、その構成要素は必ずしもクラスとは限らないのが現代のプログラミングです。(Kindle版 p.396)
単一責任原則(SRP)に従えば、メソッドを持ちすぎない小さなクラスの組み合わせで問題を解決するのが、オブジェクト指向らしい設計 (Kindle版 p.395)
「振る舞いの詳細を隠蔽した抽象」であるかぎり、それはまぎれもなくオブジェクト指向の構成要素 (Kindle版 p.396)
思い出した:プログラミング言語とシステムデザイン – Clojure, Java, DDD, Clean Architecture
振る舞いを持った抽象
Tagged Unions
Command
UIとユースケースの疎結合(橋渡し)
即時実行しない
キューイング
Observer
身近な例:イベントリスナ
橋渡し(片方はサードパーティのように自分で変えられないような場合)
デフォルトはobserverの配列が空。ユーザが追加して振る舞いを足せる
Visitor(ちょうぜつ本)
Tell, Don't Ask.
トップレベルのインターフェースがひとつあれば目的を果たせるようにすべきという教え (Kindle版 p.425)
👉Tell, don't ask(ななうぇぶさん)